专利摘要:
1つ以上のプロセッサコア(15)を有するプロセッサ(12)は、1つ以上のプロセス(P1,P2)を含む命令を実行する実行ロジックを有する。各プロセスは1つ以上の実行スレッド(T1,T2)を含んでもよい。また、前記プロセッサは、モニタロジック(18)とモニタプロセス(モニタコード)とを有するプロファイリングメカニズムを有する。前記モニタロジックは、前記1つ以上のプロセスをモニタし、モニタされている前記1つ以上のプロセスの制御のフローに割り込むことなく、前記1つ以上のプロセスに関連するパフォーマンスデータへのアクセスを提供する。前記モニタプロセスは、前記パフォーマンスデータを収集しうる。また、前記モニタプロセスは、ユーザモードで動作中に、前記1つ以上のプロセッサコアによって実行可能なプログラム命令を含んでもよい。
公开号:JP2011507128A
申请号:JP2010539421
申请日:2008-12-03
公开日:2011-03-03
发明作者:シェルノフ アントン
申请人:グローバルファウンドリーズ・インコーポレイテッド;
IPC主号:G06F11-34
专利说明:

[0001] 本発明はマイクロプロセッサに関し、より詳細には、プログラムの実行中にマイクロプロセッサのプロセスおよびプロセスパフォーマンスデータの収集をモニタするメカニズムに関する。]
背景技術

[0002] 長年にわたり、ソフトウェア技術者やプロセッサの設計者は、実行中にソフトウェアの挙動を測定できる機能の必要性を認めてきた。関数呼び出しの頻度や継続時間の挙動などを測定可能なプロファイリングメカニズムが数多く存在する。プロファイラまたはプログラム解析ツールは、所定のプロセスをモニタし、イベントのストリームの出力または履歴イベントのサマリーを提供する。]
[0003] 実行中のソフトウェアをプロファイルするためのさまざまな方法が存在する。例えば、1つの方法として、実行する実際のコードをインストルメント化する方法がある。一般に、「インストルメント化」とは、モニタ対象のプログラムへのモニタコードの挿入をいう。インストルメント化されたコードは、分析データを出力することができる。ほかのタイプのプロファイリングとしては、イベントベースのプロファイリング、統計プロファイリングがある。イベントベースのプロファイラのなかには、例えば、呼び出しなどのイベントをトラップするプロファイリングモジュールを使用するものがある。統計プロファイリングは、時間またはイベントの発生回数に基づく所定のインターバルでオペレーティングシステムに割り込むことによるサンプリングを使用する。]
発明が解決しようとする課題

[0004] このようなタイプの従来のプロファイラは結果を提供する。しかし、このようなプロファイラは、CPUおよび実行プロセスに追加する状態が多すぎ、プロセスフローに頻繁に割り込み過ぎるため、モニタされているプロセスを中断させる傾向がある。]
課題を解決するための手段

[0005] プロセッサで実行中のソフトウェアをプロファイリングするためのメカニズムの各種実施形態が開示される。一実施形態では、1つ以上のプロセッサコアを有するプロセッサは、1つ以上のプロセスを含む命令を実行しうる実行論理を有する。各プロセスは1つ以上の実行スレッドを含んでもよい。また、前記プロセッサは、モニタ論理とモニタプロセスとを有するプロファイリングメカニズムを有する。前記モニタ論理は、前記1つ以上のプロセスをモニタし、モニタされている前記1つ以上のプロセスの制御のフローに割り込むことなく、前記1つ以上のプロセスに関連するパフォーマンスデータへのアクセスを提供する。前記モニタプロセスは、前記パフォーマンスデータを収集しうる。]
[0006] 特定の一実施形態では、前記モニタプロセスは、ユーザモードで動作中に、前記1つ以上のプロセッサコアによって実行可能なプログラム命令を含む。]
図面の簡単な説明

[0007] マルチコア処理ノードを有するコンピュータシステムの一実施形態のブロック図。
図1のプロファイリングメカニズムの実施形態のより詳細な態様を示すブロック図。
例示的な命令のリタイアのイベントレコードを示す図。
例示的な分岐のリタイアのイベントレコードを示す図。
例示的なDCacheミスのイベントレコードを示す図。
例示的なプロファイリング制御ブロックの一実施形態を示す図。] 図1
実施例

[0008] 本発明は、さまざまに変形されたり代替形態を取りうるが、その特定の実施形態が、例として図面に図示され、かつ本明細書に詳細に記載される。しかし、図面およびその詳細な説明は、開示の形態に本発明を限定することを意図するものではなく、逆に、本発明が、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれるすべての変形例、均等物および代替例を含むことを意図することが理解されるべきである。本願にわたり、「しうる」、「してもよい」との文言は、許容を示す意味(すなわち、可能性がある、可能であること)で用いられており、義務的な意味(すなわち必須)ではない点が留意される。]
[0009] 図1を参照すると、コンピュータシステム10の一実施形態のブロック図が示される。図に示した実施形態では、コンピュータシステム10は、メモリ14と、周辺機器13A〜13Bとに結合された処理ノード12を有する。ノード12は、ノードコントローラ20に結合されたプロセッサコア15A〜15Bを有し、ノードコントローラ20は、メモリコントローラ22、複数のHyperTransport(登録商標)(HT)インタフェース回路24A〜24C、および共有の3次(L3)キャッシュメモリ60に接続されている。HT回路24Cは周辺機器16Aに結合されており、周辺機器16Aはデイジーチェーン構成で(この実施形態では、HTインタフェースを使用して)周辺機器16Bに結合されている。ほかのHT回路24A〜Bも、別のHTインタフェース(図示せず)を介して、ほかの同様の処理ノード(図示せず)に接続されてもよい。メモリコントローラ22は、メモリ14に結合されている。一実施形態では、ノード12は、図1に示す回路を含む1つの集積回路チップでもよい。すなわち、ノード12は、チップマルチプロセッサ(CMP)でもよい。任意のレベルの集積化が使用されても、または別個のコンポーネントが使用されてもよい。処理ノード12が、説明を簡略にするために省略した他の各種回路を備えてもよい点が留意される。なお、数字と文字(プロセッサコア15Aなど)を含む参照符号は、適切な場合、数字のみで参照することもある。] 図1
[0010] 一般に、プロセッサコア15A〜15Bは、ノードコントローラ20へのインタフェースを使用して、プロセッサコア15A〜15B相互のほか、コンピュータシステム10の他の構成要素(例えば周辺機器13A〜13B、他のプロセッサコア(図示せず)、メモリコントローラ22など)と通信しうる。このインタフェースは、好ましい方式であればどのような方式で設計されてもよい。一部の実施形態では、このインタフェース用にキャッシュコヒーレントな通信が規定されてもよい。一実施形態では、ノードコントローラ20とプロセッサコア15A〜15B間のインタフェースにおける通信は、HTインタフェースで使用されるものと同様のパケット形式で行われうる。別の実施形態では、好適であれば、どのような通信を使用してもよい(例えばバスインタフェースでのトランザクション、異なる形式のパケットなど)。別の実施形態では、プロセッサコア15A〜15Bは、ノードコントローラ20とインタフェースを共有してもよい(例えば共有バスインタフェースなど)。一般に、プロセッサコア15A〜15Bからの通信には、(メモリロケーションまたはプロセッサコアの外部のレジスタを読み出すための)リードオペレーション、(メモリロケーションまたは外部レジスタに書き込むための)ライトオペレーション、(キャッシュコヒーレントな実施形態のための)プローブへの応答、割り込みの肯定応答、およびシステム管理メッセージなどの要求が含まれうる。]
[0011] 上で説明したように、メモリ14は、任意の適したメモリデバイスを有しうる。例えば、メモリ14は、1つ以上のランダムアクセスメモリ(RAM)を有し、これには、ダイナミックRAM(DRAM)に属するRAMBUS DRAM(RDRAM)、シンクロナスDRAM(SDRAM)、ダブルデータレート(DDR)SDRAMなどがある。別の実施形態では、メモリ14が、スタティックRAMなどを使用して実装されてもよい。メモリ14は、時に取得可能な「計算機可読記憶媒体」と呼ばれることがあり、プログラムのデータと命令が記憶され、実行のために取得されうる。メモリコントローラ22は、メモリ14にインタフェースするための制御回路を有しうる。更に、メモリコントローラ22は、メモリ要求をキューイングするなどのための要求キューを備えていてもよい。]
[0012] HT回路24A〜24Cは、HTリンクからパケットを受信し、HTリンクにパケットを送信するための各種のバッファと制御回路とを備えうる。HTインタフェースは、パケットを送信するための一方向リンクを有する。各HT回路24A〜24Cは、2本のこのようなリンク(送信用に1本、受信用に1本)に結合されうる。あるHTインタフェースは、(例えば処理ノード間では)キャッシュコヒーレントな方式で動作し、(例えば周辺機器16A〜16Bとの間では)非コヒーレントな方式で動作しうる。図に示した実施形態では、HT回路24A〜24Bは使用されておらず、HT回路24Cが非コヒーレントなリンクを介して周辺機器16A〜16Bに結合されている。]
[0013] 本実施形態は、ノード間、ならびにノードと周辺機器間の通信にHTインタフェースを使用するが、ほかの実施形態は、このいずれかの通信に任意の所望の1つ以上のインタフェースを使用してもよい点が留意される。例えば、ほかのパケットベースのインタフェースが使用されても、バスインタフェースが使用されても、各種の標準的な周辺機器インタフェース(例えば、周辺装置相互接続(PCI)、PCIエクスプレスなど)が使用されてもよい。]
[0014] 周辺機器13A〜13Bは、どのようなタイプの周辺機器でもよい。例えば、周辺機器13A〜13Bは、別のコンピュータシステムと通信するためのデバイス(例えば、ネットワークインターフェイスカード、コンピュータシステムのメイン回路基板に集積された、ネットワークインターフェイスカードと同様の回路、あるいはモデム)を有し、そのデバイスがその別のコンピュータシステムに結合されうる。また、周辺機器13A〜13Bは、ビデオアクセラレータ、オーディオカード、またはドライブコントローラ、SCSI(Small Computer Systems Interface)アダプタ、テレフォニーカード、サウンドカード、およびGPIBインタフェースカードまたはフィールドバスインタフェースカードなどの各種のデータ収集カードを含んでいてもよい。更に、周辺機器13A〜13Bは、ハードディスク、フロッピーディスクドライブ、フラッシュドライブ、光記憶媒体などの不揮発性ストレージを含んでもよい。「周辺機器」との用語は、入出力(I/O)デバイスも含むことを意図している点に注意されたい。]
[0015] 一般に、プロセッサコア15A〜15Bは、所定の命令セットアーキテクチャに規定されている命令を実行するように設計された回路を有しうる。すなわち、プロセッサコア回路は、命令セットアーキテクチャに規定されている命令のフェッチ、デコード、実行、およびその結果のストアを行うように構成されうる。例えば、一実施形態では、プロセッサコア15A〜15Bは、x86アーキテクチャを実装しうる。このように、プロセッサコアは、1つ以上のモードまたは保護レベルで動作してもよく、これらは、通常、「CPU保護レベル(CPL)」または「保護リング」と呼ばれる。x86アーキテクチャでは、CPL0〜CPL3の4つのレベルが存在するが、通常は2つのレベルのみが使用される。一般に使用されるレベルの一方はCPL0であり、一般に「カーネルモード」と呼ばれ、最も特権が高いレベルである。一般に使用されるもう一方のレベルはCPL3であり、一般に「ユーザモード」と呼ばれ、最も特権が低いレベルである。]
[0016] プロセッサコア15A〜15Bは、スーパーパイプライン、スーパースカラーまたはその組み合わせを含む任意の所望の構成を有しうる。ほかの構成としては、スカラー、パイプライン処理、非パイプライン処理などがある。実施形態によって、アウトオブオーダーの投機的な実行が使用されても、インオーダーの実行が使用されてもよい。プロセッサコアは、上記の構造のいずれかと組み合わせて、1つ以上の命令または他の機能のためのマイクロコードを有してもよい。各種実施形態は、さまざまな他の設計的な特徴を実装してもよく、これには、キャッシュ、変換ルックアサイドバッファ(TLB)、ミスアドレスバッファ(MAB)、モデル固有レジスタ(MSR)、制御レジスタ(CR)のほか、他のシステムレベルの制御ハードウェアなどが挙げられる。したがって、図に示した実施形態では、プロセッサコア15Aは、それぞれ、符号16A,17Aで示すPMSR0,PMSR1と、イベントカウンタ19Aを備えたモニタ論理18Aとを有するプロファイリングハードウェアを備える。別の実施形態では、例えば、モデル固有レジスタなど、使用されるプロファイリングハードウェア要素の個数が変わってもよい点が留意される。また、イベントカウンタ19Aが1つのブロックとして図示されている点にも留意されたい。しかし、各種実装では、プロセッサ15Aが、カウント対象のイベントの近くに設けられた複数のイベントカウンタユニットを有してもよい。例えば、特定のイベントカウンタユニットが命令のリタイアをカウントする場合、カウンタユニットは、リオーダーバッファ論理(図示せず)など、このような情報を保持している論理の物理的に近くに設けられうる。図に示すように、プロセッサコア15Bも同様の特徴を有する。]
[0017] 各種実施形態では、ノードコントローラ20は、プロセッサコア15A,15Bを、プロセッサコア15A,15B同士を相互接続するか、ほかのノードに、およびメモリに相互接続するための各種の相互接続回路(図示せず)も備えうる。また、ノードコントローラ20は、ノードの最大動作周波数と最小動作周波数、ノードの最大電源電圧と最小電源電圧などの、各種のノード特性を選択および制御するための機能も有しうる。ノードコントローラ20は、一般に、通信種別、通信文(communication)内のアドレスなどに応じて、プロセッサコア15A〜15Bと、メモリコントローラ22と、HT回路24A〜24Cとの間の通信を転送するように構成されうる。一実施形態では、ノードコントローラ20は、受信した通信文をノードコントローラ20が書き込むシステム要求キュー(SRQ)(図示せず)を備えうる。ノードコントローラ20は、プロセッサコア15A〜15B、HT回路24A〜24C、およびメモリコントローラ22のうちの1つ以上の宛先に転送するために、SRQにある通信をスケジュールしうる。また、図に示した実施形態では、ノードコントローラ20は、プロファイリングハードウェアの一部をなし、このため「モニタ論理18」と図示されている追加のモニタ論理を有する。これは、なかでも、プロセスのプロファイリング動作時に、モニタサンプルのメモリ14と周辺機器13とへの転送を制御するように構成されうる。]
[0018] 下で更に詳細に説明するように、プロセッサコア15A,15Bは、同時に1つ以上のスレッドまたはプロセスを実行するようにそれぞれ構成されうる。また、プロセッサ15A,15Bは、プロセスのプロファイリングを可能にするハードウェアとソフトウェアの機能(すなわち、プロファイリングメカニズム)をそれぞれ備えうる。例えば、プロセッサ15Aは、モニタプロセスをユーザモード(CPL3)またはカーネルモード(CPL0)で実行するように構成されうる。このモニタプロセスは、モニタされているプロセスの制御フローに割り込むことなく、プロセッサコア15Aまたはプロセッサコア15Bで実行中のユーザモードプロセスに関連するパフォーマンスデータを収集しうる。このように、PMSR0,PMSR1、モニタ論理18A、モニタ論理18B、およびモニタ論理18などのプロセッサコアハードウェアにより、このようなパフォーマンスデータの収集が容易となりうる。]
[0019] また、図1に示したコンピュータシステム10の処理ノード12は1つであるが、別の実施形態では、実装される処理ノードの数はいくつであってもよい点が留意される。同様に、実施形態ごとに、ノード12などの処理ノードに含まれるプロセッサコアの数はいくつでもよい。コンピュータシステム10のさまざまな実施形態では、ノード12当たりのHTインタフェースの数、ノードに結合されている周辺機器13の数などが変わってもよい。] 図1
[0020] 図2を参照すると、図1のプロファイリングメカニズムの特定の一実施形態のより詳細な態様を例示するアーキテクチャ図が示される。より詳細には、モニタ論理18はイベントカウンタ19、ミスイベントカウンタ221を備え、一部の実装では、制御ブロックレジスタ218も備える。図に示すように、モニタ論理18は周辺機器13Aと通信しており、周辺機器13Aは、図に示した実施形態では、例えば、ハードディスクドライブまたはフラッシュドライブ等の不揮発性ストレージとして図示されている。また、モニタ論理18は、メモリ14のほかオペレーティングシステム250とも通信しており、オペレーティングシステム250は、それぞれ、プロセッサコア15A,15Bの一方または両方で実行中のオペレーティングシステム(OS)のインスタンスを表しうる。このように、一実施形態では、プロファイリングメカニズム200は、例えばOS、モニタ論理18、PMSR0,PMSR1、メモリ14、および周辺機器13Aの少なくとも一部を集合的に含んでもよい。] 図1 図2
[0021] プロファイリングメカニズム200は、ユーザモード(CPL3)プロセスが、自身に関するパフォーマンスデータを極めて低いオーバーヘッドで収集できるようにするために、プロセッサアーキテクチャを拡張する。例えば、ダイナミックオプティマイザ、管理ランタイム環境などのモジュールが、現在実行中のプログラムを、高精度かつ高分解能でモニタするために有効にされ、これにより、これらのモジュールが、パフォーマンスの問題および機会を報告して、これらを直ちに修正できるようにする。アーキテクチャの拡張により、プログラムは、ポーリングを行ったり時々割り込みをかけることによって、パフォーマンスデータを収集し、このデータを検査できるようになる。この拡張によりCPUにおよびプロセスに追加される状態が最小限に抑えられる。この手法は、割り込みなしで大量のデータを収集することができ、パフォーマンスフィードバックの使用のオーバーヘッドをかなり低減することができるという点で、従来のパフォーマンスカウンタとは異なる。より詳細には、一実施形態では、本明細書に記載のプロファイリングメカニズム200は、データ収集割り込みを一切必要としないポーリング手法と併用することができる。また、プロファイリングメカニズム200により、ユーザモードプログラムが、データ収集用のハードウェアまたはソフトウェアと対話するソフトウェアルーチンであるドライバを呼び出すことなく、自身のデータ収集を制御できるようになる。最後に、プロファイリングメカニズム200は、スレッドのコンテキスト内で実行され、このため、システム内の複数のプロセスがプロファイリングメカニズム200を同時に使用することができる。]
[0022] 各種実施形態では、モニタ論理18は、有効に設定されると、ユーザモードコードの実行中かつ所定のインターバルで1つ以上のイベントをモニタおよびカウントして、メモリ14内の実行中のプロセスのアドレス空間において、リングバッファ(例えば、リングバッファ231A)にイベントレコードを挿入するように構成されうる。リングバッファがユーザ指定のしきい値まで一杯になると、モニタ論理18は、OSに割り込みを発生させ、OSは、この割り込みを使用して、バッファの内容を不揮発性ストレージ(例えば、周辺機器13A)に移動させるか、バッファの内容を別様に使用することにより、バッファを空にするようにプロセスに指示しうる。適切なOSのサポートにより、割り込みが、別個のプロセスまたはスレッドに供給される場合もある。一部の実施形態では、プロファイリングメカニズム200は、ユーザプログラムがリングバッファ内のイベントレコードに情報を手動で挿入できるようにもしており、ユーザプログラムが、バッファ内の他のデータの解釈に影響を及ぼしうるソフトウェアイベントを記録できるようになる。]
[0023] 一実施形態では、プロファイリングメカニズム200は、命令のリタイア、分岐(例えば制御の移動)のリタイア、および特定のデータキャッシュミスなどのイベントに関連する情報を収集しうる。しかし、別の実施形態では、CPUサイクル、データTLBミス、命令TLBミス、浮動小数点演算、命令キャッシュ(ICache)ミス、およびメモリロック競合などの他のイベントがモニタされてもよいことも考察される。イベント情報はイベントレコードに記録され、この例が図3A〜図3Cに示される。] 図3A 図3B 図3C
[0024] 各種実施形態では、OSと相互動作し、協動するために、OSは、プロファイリングメカニズム200が利用可能かどうかを検出し、利用可能な場合、存在するプロファイリング機能を特定するように構成さうる。OSが、プログラムがプロファイリングメカニズム200と対話するのを許可する場合には、OSはプロファイリングメカニズム200を有効に設定しなければならない。OSは、プロファイリングメカニズム200を有効にすることによって、プロファイリング状態のコンテキスト切替をコミットする。OSは、プロファイリング割り込みを有効にすることによって、これらの処理をコミットする。また、OSの動作に関するデータが、どのユーザプロセスにもリークされることはなく、あるユーザプロセスの動作に関するデータが他のプロセスにリークされることはない。]
[0025] 図に示した実施形態では、メモリ14は、複数のプロセスおよびスレッドと、プロファイリング制御ブロック情報275とのための記憶域を含む。より詳細には、メモリ14は、プロセスおよびスレッドのために割り当てられる4つの例示的なアドレス空間を有して図示されている。左から参照すると、プロセスおよびスレッド(P1T1)には、何らかのアプリケーションコードおよびモニタコードを含むユーザモードコードが含まれるほか、このアドレス空間には、イベントレコードを記憶するためのリングバッファ231Aも含まれる。また、モニタコードは、リングバッファ231Aをモニタするポーリングコードを含んでもよく、上で説明したように、リングバッファ231Aが所定のしきい値まで一杯になったときにモニタ論理18によって通知されうる。次のアドレス空間は、P1T2であり、モニタコードを含むユーザモードコードとリングバッファ231Bとが含まれるという点で、P1T1と同様である。同様に、次のアドレス空間はP2T1であり、第2のプロセスおよびスレッドと呼ぶ。]
[0026] メモリ14内の第4のアドレス空間は、P1T3で示すモニタスレッドの実施形態を示す。このモニタスレッドのアドレス空間には、この複数のリングバッファ(例えば、232A,232B)のための空間が含まれる。図に示すように、モニタコードはユーザモードコードである。モニタスレッドP1T3は、任意のプロセッサコアで実行中の複数のプロセスをモニタするために使用されうる。図に示した実施形態では、2つのリングバッファが存在しており、このため、2つのプロセスがモニタされている。しかし、別の実施形態では、いくつのスレッドまたはプロセスがモニタされてもよい。例えば、モニタスレッドP1T3が他のプロセスのスレッドをモニタしている場合、リングバッファ232Aと232Bが、モニタ中のプロセスと共有されているメモリ内に存在し、これらのバッファが、モニタスレッドP1T3と、モニタ対象のスレッドの両者によって読み書きされうる。]
[0027] イベントのモニタ中に、一実施形態では、命令が、ユーザモード(例えば、CPL3)で実行しており、例えば、命令をカウントするためのアドバンスト・マイクロ・デバイセズ規格などの命令カウント規格に従って、そのモードにおいて命令カウントに寄与する場合、その命令がカウントされうる。しかし、別の実施形態では、命令を他の方法でカウントしてもよい。更に、システム管理モード(SMM)中(あるいは、このモードに入るか、ここから出た場合)はプロファイリングが無効なことがある。]
[0028] プロファイリングが有効に設定される(下で詳細に記載する)と、ユーザスレッドは、新しい命令により、その動作に完全に制御を所有することができる。一実施形態では、この新しい命令は、LLWPCB、SLWPCBおよびLWPINSと呼ばれうる。これらの命令は、プロファイリング制御ブロック275(図4に更に詳細に図示する)へのポインタを指定し、内部プロファイリング状態を初期化し、プロファイリング動作を開始(または終了)して、リングバッファにイベントレコードを挿入する。マルチスレッドプロセス内の各スレッドは、別個にプロファイリング動作を構成しうる。スレッドは、自身のリングバッファとイベントカウンタとを有し、これらは、残りのスレッド状態とコンテキスト切替されうる。しかし、図2のスレッドP1T3などの1つのモニタスレッドが、所定のプロセスにおいて複数の他のスレッドからのデータを処理できるように、リングバッファが共有されうる。] 図2 図4
[0029] プロファイリング動作中に、モニタ論理18は、1つ以上のタイプのイベントをモニタおよび報告するように構成されうる。一実施形態では、モニタ論理18は、イベントをカウントし、イベントレコードを収集し、メモリのバッファ(例えば、リングバッファ231,232)にイベントレコードを記憶し、バッファが一杯になったことを報告し、イベントレコードを記憶する時に特定のイベントカウンタをリセットし、リングバッファ内の情報を不揮発性ストレージに転送するのを制御するように構成された機能を有しうる。これらの機能については、下で更に詳細に説明する。]
[0030] 一実施形態では、命令がリタイアされるたびに、モニタ論理18は、命令に関連するすべてのイベントの内部イベントカウンタ19をデクリメントする。命令は0、1、または複数のイベントを発生させることもあれば、イベントを発生させないものもある。例えば、メモリのポインタを介する間接的な分岐は、命令のリタイア、分岐のリタイアとしてカウントされ、最大2つ(またはTLBミスがある場合は2を超える)のデータキャッシュ(DCache)ミスと最大2つの命令キャッシュ(ICache)ミスを発生させうる。また、一部のイベントは、そのイベントのカウントを調整しうるフィルタまたは条件を有しうる。例えば、キャッシュミスイベントは、レーテンシが所定の最小値を超えるイベントのみをカウント対象とするように指定する。]
[0031] また、イベントカウンタがゼロに達したときも、イベントを報告しなければならない。したがって、モニタ論理18は、イベントレコード(図3Aに示す)を収集する。より詳細には、一実装では、レコードイベントの内部コピーに書き込まれうる。命令のリタイアなどの大半のイベントの場合、モニタ論理18は、カウンタがゼロになる原因となった命令についてのイベントレコードを収集するように構成されうる。しかし、後で更に詳細に説明するように、モニタ論理18は、イベントを発生させた次の命令のイベントレコードデータを収集するか、あるいはレコードをキャプチャするために他の動作を行うように構成されてもよい。] 図3A
[0032] モニタ論理18は、特定の実装に応じて、一度に(すなわち同時に)、1つまたは複数のイベントに関するイベント情報を収集しうる。一実装では、モニタ論理18は、対象となる(eligible)イベントの1つを選択し、選択されたイベントレコードがメモリ14に書き込まれるまで、他の期限切れのイベントが待機して、その後、モニタ論理18は、待機イベントのための次の対象となる(eligible)命令を選択しうる。別の実装では、複数のイベントカウンタがゼロになると、モニタ論理18はイベントごとに1つのイベントレコードを収集して、これらをメモリ14に逐次的に書き込んでもよい。]
[0033] モニタ論理18は、特定の場合に、イベント発生を廃棄するように構成されうる。例えば、所定のリングバッファをディスクからページインする必要がある場合、未処理のイベントレコードデータを維持する理由がなくなる。イベントが廃棄されると、モニタ論理18は、イベントを発生させる次の命令のイベントレコードを収集しうる。同様に、モニタ論理18が、完全なイベントレコードを収集するために命令を再実行する必要がある場合、リタイアの代わりに、再生が何かの理由で中止されうる。この場合、イベントカウンタ19はゼロのままとなり、モニタ論理18は、イベントを発生させる次の命令のイベントレコードを収集しうる。]
[0034] イベントカウンタがゼロに達した場合など、完全なイベントレコードが収集されると、モニタ論理18は、プロセスのアドレス空間のリングバッファ(例えば231)にイベントを記憶して、リングバッファポインタを先に進めるように構成されうる。この時点でリングバッファが一杯の場合、モニタ論理18はミスイベントのミスイベントカウンタをインクリメントし、リングバッファポインタを先に進めない。]
[0035] 複数のイベントレコードが同時に記憶できる状態にある場合、一実装では、1つのイベントのみが記憶されうる。モニタ論理18は、他のイベントレコードの記憶を遅らせるか、あるいは、情報を廃棄して、必要に応じて、廃棄されたイベントタイプについて次の対象となる(eligible)命令を再び選択してもよい。ストアが命令のリタイアと同期して完了する必要がない点が留意される。換言すれば、プロファイリングメカニズム200がイベントレコードの内容をバッファする場合、イベントを発生させた命令がリタイアされたあとに、数サイクルしてからストア段階(および後続の段階)が完了してもよい。イベントおよび命令に関連するデータは厳密であるが、プロファイリングプロセスの残りが後から完了してもよい。]
[0036] プロファイリングのしきい値割り込みが有効にされ、リングバッファ内の使用中の空間がユーザ定義の所定のしきい値を超えた場合、モニタ論理18は、何らかのプロセスに対してバッファを空にするようにOSが指示できるように、割り込みを開始するように構成されうる。この割り込みは、例えば、上記の例で説明したP1T3などのモニタ中のプロセスまたは別個のプロセスまたはスレッドに送られうる。割り込みは、しきい値を到達させたイベントよりもかなり遅れて発生することがある点が留意される。]
[0037] イベントレコードが記憶されると、記憶されているイベントのカウンタが、そのプログラムされたインターバル(任意の乱数化が適用される)にリセットされ、そのイベントのカウントが再開されうる。イベントレコードが記憶された場合、またはミスイベントカウンタがインクリメントされた場合にリセットが行われる。]
[0038] 一実施形態では、リングバッファのイベントを処理するための割り込みが発生するまで、ユーザプロセスは待機しうる。しかし、これには、何らかのカーネルまたはドライバのサポートが必要となりうる。このように、割り込みは、カーネルモードルーチンが許可する場合にのみ有効にされうる。例えば、ユーザプログラムは、ドライバを呼び出して、プロファイリングメカニズムの割り込みをセマフォまたはミューテックスと関連付けてもよい。割り込みが発生した場合、ドライバは関連するオブジェクトに通知しうる。オブジェクトで待機している任意のスレッドが起動されて、バッファを処理しうる。しかし、他のドライバモデルも可能であると考察される。]
[0039] 別の実施形態では、ユーザプロセスは、定期的にリングバッファ(例えば231)をポーリング(例えば233)して、このリングバッファからイベントレコードを除去し、ハードウェアプロファイリングメカニズム200がレコードを記憶し続けることができるように、テイルポインタを先に進めるスレッドを有しうる。]
[0040] 前述のように、モニタされたイベントが、そのイベントカウンタをオーバーフローさせると、モニタ論理18は、イベントレコードを適切なイベントリングバッファに書き込む。各種実施形態では、図3A〜図3Cに示すように、リングバッファの各イベントレコードは32バイト長である。しかし、別の実施形態では、必要に応じてほかのバイト数が使用されてもよいと考察される。実際のレコードサイズは、CPUIDコマンドを使用して、プロファイリングメカニズム200を特徴付けることで決定することができる。プロファイリングメカニズム200がイベントレコードを書き込む際に、イベントレコードの「予約済み」フィールドがゼロにセットされうる点が留意される。しかし、別の実施形態では、プロファイリングメカニズムを特徴付ける他の方法を提供してもよい。図3A〜図3Cに示すイベントレコードは例示的なレコードであることに注意されたい。別の実施形態では、イベントレコードが、ほかのフィールドを有しても、レコード内でのフィールドの並び方が異なっても、フィールドが図3A〜図3Cに示すイベントレコードとは異なるサイズを有してもよい。] 図3A 図3B 図3C
[0041] 図3Aを参照すると、命令のリタイアの例示的なイベントレコード305が示される。最初の行を右からみていくと、バイト0は、イベントレコードタイプを指定するイベントIDフィールドである。イベントIDが「1」の場合、命令のリタイアのイベントレコードを表す。一実施形態では、有効な識別子は1〜255であり、ゼロは無効なイベント識別子である。次のバイトはコア識別子フィールドである。マルチコアシステムの場合、このフィールドは、プロファイリングメカニズム200が実行中のコアを識別する。このフィールドにより、ソフトウェアが、CPU情報を残したまま、複数のスレッドからのイベントレコードを1つのバッファにまとめることが可能となる。一実施形態では、シングルコアシステムでは、IDにゼロが使用されうる。一部の実施形態では、コア識別子は、マシン固有レジスタ(MSR)、あるいはオペレーティングシステムまたは他のコードによって初期化される他の値から与えられうる。次の2バイトは、イベント固有のフラグフィールドであり、イベントレコードのタイプに応じて任意の数のフラグを含んでもよい。この例示的なイベントレコードでは、フィールド全体が予約されている。次の4バイトは、イベント固有のデータフィールドを表す。この例示的なイベントレコードでは、これらのバイトは予約されている。次の行は、バイト8:15を含み、命令アドレスを表す。] 図3A
[0042] 一実施形態では、命令がリタイアされるたびに、イベントカウンタがデクリメントされる。カウンタがゼロになると、プロファイリングメカニズム200内のモニタ論理18は、イベント識別子に「1」を指定してイベントレコードを記憶するように構成されうる。イベントレコードのバイト8:15は、その実行がイベントを発生させた命令の線形命令ポインタアドレスを含む。]
[0043] 図3Bを参照すると、分岐のリタイアの例示的なイベントレコード310が示される。イベントレコード310の構造は、図3Aに示したイベントレコード305と同様である。しかし、図3Bに示すように、イベントIDは2であり、このイベントレコードが分岐のリタイアのイベントレコードであることを示す。イベント固有フラグフィールドには、ビット位置31:29に3つのフラグが含まれる。このフラグは、それぞれ、TKN、PRDおよびPRVである。一実施形態では、TKNビットは、分岐を辿った場合は論理1を示し、分岐を辿らなかった場合は論理0を示す。PRDビットは、分岐が正しく予測された場合は論理1を示し、予測ミスの場合は論理0を示す。PRVビットは、PRDビットが有効な場合は論理1を示し、予測情報が無効な場合は論理0を示す。図3Aと同様に、図3Bのバイト8:15は命令アドレスを含むほか、バイト16:23は、分岐後の命令のアドレスを表す。このアドレスは、分岐を辿った場合は分岐先のアドレス、分岐を辿らなかった場合は直進(fall-through)のアドレスである。] 図3A 図3B
[0044] 各種実施形態では、分岐を辿ったかどうかを問わず、制御の遷移がリタイアされるたびに、イベントカウンタがデクリメントされる。制御の遷移には、ショート分岐、ロング分岐(JCXZおよびその変種を含む)、LOOPx、CALL、およびRETの各命令が含まれる。しかし、同期、非同期を問わず、トラップまたは割り込みは含まれず、CPL3、SMMまたはSVMとの間の切り替えオペレーション(例えばSYSCALL、SYSENTERまたはINT 3)は含まれなくてもよい。]
[0045] カウンタがゼロになると、プロファイリングメカニズム200内のモニタ論理18は、イベント識別子が「2」のイベントレコードを記憶するように構成されうる。フラグは、分岐を辿ったかどうか(無条件遷移の場合は常に真)と、正しく予測されたかどうか(直接分岐の場合は常に真)を示す。また、レコードは、分岐命令と分岐先のアドレスも含む。条件付き分岐を辿らなかった場合、分岐先は直進(fall-through)のアドレスとなる。プロファイリングメカニズム200の一部の実装では、分岐の一部または全てに関する分岐予測情報をキャプチャしないこともある。イベントレコード内のビットが、予測情報が有効かどうかを示しうる。]
[0046] 図3Cを参照すると、DCacheミスの例示的なイベントレコード320が示される。イベントレコード320の構造は、図3A,3Bにそれぞれ示したイベントレコード305,310と同様である。しかし、図3Cに示すように、イベントIDは3であり、このイベントレコードがDCacheミスのイベントレコードであることを示す。イベント固有フラグフィールドには、ビット位置31:28に2つのフラグが含まれる。このフラグは、それぞれ、ビット位置31:28を含むSRCとDAVであり、一実施形態では、SRCビットは、要求されたデータのソースのビットコードを表す。SRCコードのセットの例を表1に示すが、他のコードも可能であり、考察される。DAVビットは、データアドレスが有効な場合は論理1を示し、データアドレスが無効な場合は論理0を示す。図3Aと同様に、図3Cのバイト8:15にも命令アドレスが含まれる。また、バイト16:23は、メモリ参照(DAVビット=1の場合)のアドレスを表す。下で更に詳細に説明するように、イベント固有データバイトは「レーテンシ」に指定され、(サイクルにおける)キャッシュミスの総レーテンシを示す。] 図3A 図3C
[0047] 各種実施形態では、DCacheミスのレーテンシが所定のLatencyしきい値を超える場合、および/または、データがキャッシュまたはメモリ階層の、カウントするように選択されたレベルから提供される場合、メモリからのロードがDCacheミスを発生させるたびに、イベントカウンタがデクリメントされる。一実施形態では、1回のロードで2つのミスを発生させる不整合アクセスにより、イベントカウンタが1だけデクリメントされ、イベントを報告する場合、データが、ミスとなった最下位アドレスとなる。プロファイリングメカニズム200は、TLBウォーク、ローカルまたはグローバルディスクリプタテーブル(LDT、GDT)の参照、TLBミスなどに間接的に起因するキャッシュミスはカウントしなくてもよい。したがって、一実施形態では、プロファイリングメカニズム200は、命令が直接の原因となったロードのみをカウントしうる。]
[0048] カウンタがゼロになると、モニタ論理18は、イベント識別子が「3」のイベントレコードを記憶するように構成されうる。フラグは任意選択でデータのソースを示す(利用可能な場合)。イベントレコードには、総レーテンシ、ロード命令のアドレス、および参照されたデータのアドレスが含まれる。しかし、プロファイリングハードウェア自体によって発生したキャッシュミスはカウント対象とならない。]
[0049] x86アーキテクチャでは、複数のロードが同時に未処理となりうる点が留意される。しかし、場合によっては、キャッシュミスの解決を待機中のすべてのロードに対して、完全なレーテンシカウンタを設定することは実際的ではないこともある。このような場合、さまざまな単純化が使用されてもよいと考えられる。]
[0050] 例えば、一実装では、レーテンシが2jの倍数に丸められうる(jは、1〜4(1と4を含む))。例えば、以降の説明において、j=4、2j=16と仮定する。イベントレコード中で報告されるレーテンシの下位4ビットが0となる。実際のレーテンシカウンタは、(16の待機サイクルごとに)16ずつインクリメントされうる。プロファイリングメカニズムの機能の問合せ時に、CPUID命令によって、jの値が、「PLatencyRnd」あるいは同様の名前で戻される。しかし、jの値を戻すために他のメカニズムを使用することもできる。]
[0051] 別の実装では、レーテンシのカウントの開始時に、近似が実行されてもよい。16の増分でカウントする場合、ロードが待機を開始したときに、16サイクル開始する必要がない。この代わりに、最初の16サイクルの待機中の任意の時点で、レーテンシ値が、0から16に一気に上がりうる。]
[0052] 別の実装では、総レーテンシの上限が、2n−16(n≧10)に制限されうる。このため、レーテンシカウンタは、最大値に達するとカウントを中止する飽和カウンタを実装する。例えば、n=10の場合、レーテンシ値は16きざみで0〜1008の範囲を取り、1008で止まる。また、n=10の場合、各カウンタを、わずか6ビットを使用して実装することができる。nの値は、プロファイリングメカニズムの機能の問合せ時に、CPUID命令(または別のメカニズム)によってPLatencyMaxとして戻される。]
[0053] 上記の例では、キャッシュミスイベントをカウント対象とすべきかどうかを決定する比較を実行する際に、イベントをフィルタするために使用されるレーテンシしきい値が16の倍数である点が留意される。上記の単純化を使用すべきかどうか決定する場合、チップ面積(area)と電力に関して実際的な単純化を選択すべきである点にも留意されたい。]
[0054] 前述のように、DCacheミスのイベントレコードは、データの線形アドレスを報告する。線形アドレスの記録方法は、報告されるイベント自体と、キャッシュミスイベントの報告に要する時間とに影響する。したがって、モニタ論理18は、カウンタをゼロにするイベントか、あるいは次の対象となる(eligible)イベントのいずれかのデータをキャプチャしうる。
プロファイリングの設定]
[0055] 動作時に、一実施形態では、プロファイリングメカニズム200が存在するかどうかを識別するためにCPUID命令が使用されうる。さらに詳しくは、Call:CPUID≦EAX:8000_0001を実行すると、プロセッサEDXビット0が戻されうる。ビット0が論理値1にアサートされている場合、プロファイリングメカニズム200が存在し、ビット0が論理値0にアサートされている場合、プロファイリングメカニズム200が存在しない。しかし、別の実施形態では、これらの論理値と、論理値に対応する機能とが逆転してもよいと考えられる。]
[0056] また、サポートされているプロファイリングメカニズムの機能を識別するために、CPUID命令が、新しいリーフ要求コードと共に使用されうる。例えば、Call:CPUID≦EAX:8000_001C(拡張機能ではEAX:8000_001Dを使用)を実行すると、特定の値が戻されうる。この値のセットの例を下の表2に示すが、他の値およびビット機能も可能であり、考察される。]
[0057] 一実施形態では、EAX内に戻されるビットは、PMSR0から取得され、プロファイリングメカニズム200の現在有効な機能を示している。しかし、これらは、現在のプロセッサにおいてプロファイリングメカニズム200のすべての機能を示すEDX内に戻されるビットのサブセットである。プロファイリングメカニズム200の使用可能な全機能をサポートするようにOSが構成されていない場合には、OSは、プロファイリングメカニズム200のサブセットを有効に設定しうる。例えば、OSがプロファイリングしきい値割り込みを処理しないように構成されている場合、この機能を無効にしうる。ユーザモードのソフトウェアは、使用できる機能を記述するEAXのビットを解釈するように構成する必要がある。オペレーティングシステムは、プロファイリングメカニズム200の機能を決定し、使用可能な機能のすべてまたは一部を有効にするために、EDXのビットを使用するように構成される必要がある。別の実施形態では、特に、ここに記載した例を拡張した実装や、ここに記載した例のサブセットの実装では、プロファイリングメカニズムが、異なる命令またはメカニズムを使用してプロセッサの構成を報告し、追加のデータおよびパラメータを報告してもよい点に留意されたい。]
[0058] <プロファイリングの有効化と制御>
前述のように、PMSRはモデル固有レジスタであり、プロファイリングメカニズム200のハードウェアを記述し、これを制御している。一実施形態では、CPUID 8000_0001のEDXビット0が論理値1にセットされている場合、PMSRが利用可能である。]
[0059] PMSR0は、プロファイリングメカニズム200機能の有効レジスタと呼ばれうる。このように、PMSR0は、プロファイリングメカニズム200が、所定のプロセッサでどのように使用できるかを制御しうる。どのビットが、どのような値にアサートされているかに応じて、プロファイリングメカニズム200の使用を禁止したり、その動作を数通りの方法で制限することができる。PMSR0で有効にできる機能を下記の表3に示す。しかし、表3に示すPMSR0の機能は例示であり、別の実施形態では、他の機能やビットが使用されてもよいと考えられる点が留意される。]
[0060] OSは、起動時(または、プロファイリングメカニズム200ドライバのロード時)に、プロファイリングメカニズム200のサポートレベルを示すPMSR0をロードするように構成されうる。一実装では、プロファイリングメカニズム200の列挙時に、CPUID命令に応答してEDXにセットされるビットのみを、PMSR0中でオンにすることができる。その他のビットをセットしようとすると、#GPフォルトが発生しうる。ユーザコードは、EAX=8000_001Cを使用してCPUIDを実行することでPMSR0の内容を調べ、EAXの内容を調べることができる。]
[0061] 図1の説明と併せて上で説明したように、PMSR1は、プロファイリング制御ブロック(PCB)ポインタの内部コピーへのアクセスを提供する。一実施形態では、下で更に詳細に説明するように、カーネルモード時には、このレジスタにRDMSR命令を実行すると、SLWPCB命令に対応するオペレーションが実行され、このレジスタにWRMSR命令を実行すると、LLWPCB命令に対応するオペレーションが実行される。] 図1
[0062] 図1の説明と併せて、PMSR2は、モニタ対象のスレッドが実行中のプロセッサを識別するために、イベントレコードのコアIDフィールドに記憶されている値を提供しうる。この値は、BIOSまたはオペレーティングシステムによってセットされるか、あるいは、ハードウェアによって初期化されうる。] 図1
[0063] 一実施形態では、ユーザモードにおいて、プロファイリングを有効/無効にし、プロファイルされているイベントを制御するために、LLWPCB命令が使用されうる。同様に、ユーザモードにおいてプロファイリングの現在の状態を問合せるために、SLWPCB命令が使用されうる。これらの命令は、PMSR1内のPCBポインタへのユーザモードのアクセスを事実上提供する。また、LWPINS命令は、イベントリングバッファにイベントレコードをソフトウェアによって挿入可能にする。
LLWPCB命令]
[0064] 一実施形態では、LLWPCB命令は、Load Lightweight Profiling Control Block(ロード軽量プロファイリング制御ブロック)の略字であり、DS:rAXにおいてプロファイリング制御ブロック(PCB)から、プロファイリングメカニズム200のハードウェアの状態をセットし、指定されている場合、プロファイリングを有効に設定しうる。rAXレジスタ内のPCBアドレスの以前の値を戻しうる。]
[0065] 一実施形態では、プロファイリングを無効にするには、rAX=0を指定してLLWPCB命令が実行されうる。このオペレーションは、マシンが保護モードにある場合にのみ発行されるが、任意の特権レベルで実行できる。しかし、CPL3以外の特権レベルから実行された場合、内部PCBポインタはロードされるが、プロセッサがCPL3に入るまで、プロファイリングメカニズム200の状態の残りの初期化が遅延されうる。これにより、PCBを、直ちにページインが必要なメモリに配置でき、ページフォルトがリング3から発生する。]
[0066] 一実施形態では、プロファイリングは、ユーザプログラムによってのみオンにしなければならないことがある。暗黙的にプロファイリングメカニズム200をオンにするCPL3への遷移は、拡張コンテキスト保存/復元メカニズムを使用して行わなければならず、このメカニズムは、プロファイリングメカニズム200の揮発性の状態の一部を復元し、プロファイリングメカニズム200が、自身の状態の残りをPCBから初期化する必要がある。]
[0067] プロファイリングメカニズム200は、現在アクティブな場合、内部状態を、古いPCB内のメモリにフラッシュする。次に、プロファイリングメカニズム200は、新しいPCBから新しい内部状態を設定して、得られたプロファイリングメカニズム200の状態を示すように、新しいPCB.Flagsフィールドに書き込むように構成されうる。下で更に詳細に説明するように、PCB.Flagsフィールドは、実際にプロファイルされているイベントと、しきい値割り込みが有効にされているかを示すビットを格納する。
SLWPCB命令]
[0068] 一実施形態では、SLWPCB命令は、Store Lightweight Profiling Control Block(ストア軽量プロファイリング制御ブロック)の略字であり、実行すると、プロファイリングメカニズム200の現在の状態をメモリ内のPCBにフラッシュし、rAXにPCBの現在のアドレスを戻す。プロファイリングメカニズム200が現在アクティブでない場合、SLWPCB命令を実行すると、rAXがゼロにセットされうる。このオペレーションは、マシンが保護モードにある場合にのみ発行されるが、任意の特権レベルで実行できる。]
[0069] <LWPINS命令>
一実施形態では、LWPINS命令は、実行されると、ハードウェアがリングバッファにレコードを挿入するのと同様に、現在実行中のスレッドのイベントリングバッファにイベントレコードを挿入し、リングバッファポインタを先に進める。挿入されたレコードのイベントIDは、ユーザが挿入したイベントであることを示す所定の値(例えば255)となり、レコードの他のフィールドは、この命令の実行時にプロセッサの汎用レジスタから取得されうる。LWPINS命令は、成功を示すためにプロセッサキャリービット(または他の任意のフラグビット)をクリアするか、または、リングバッファが一杯であることを示すために、このビットをセットしうる。]
[0070] 図4の説明に関連して、更に詳細に説明するように、PCBは、プロファイリングメカニズム200の動作の詳細を指定し、一実施形態では、PCBは複数のフィールドを含み、メモリのインタラクティブな領域に記憶される。この領域では、一部のフィールドが、プロファイリングメカニズム200のハードウェアによって制御および変更され、他のフィールドは、プロファイリングメカニズム200のイベントレコードを処理するソフトウェアによって制御および変更される。図2に示すように、モニタ論理18は、高速化のために、PCBからの情報の一部を内部レジスタ(例えば、制御ブロックレジスタ218)にキャッシュするように構成されている。] 図2 図4
[0071] 図4を参照すると、例示的なプロファイリング制御ブロック475が示される。図に示した実施形態では、PCB475に含まれるバイト数は、例えば、モニタされているイベントの個数に応じて、可変であり動的である。したがって、図4においては、PCB475は、M+8バイトで示される。また、PCB475は、複数のフィールドも有する。PCB475のフィールドを、表4と共に下で更に詳細に説明する。表4の「R/W」列は、プロファイリングメカニズム200が有効に設定されている間に、フィールドがどのように変更されるかを示す。「モニタ論理」は、モニタ論理18がフィールドを変更することを表し、「Init」は、モニタ論理18がLLWPCB命令を実行中にフィールドを変更することを表し、「SW」は、ソフトウェアが変更しうることを表し、「No」は、PCBが使用中である限り、フィールドの変更が禁止されていることを表す。別の実施形態では、プロファイリング制御ブロックは、図4と表4に示され、本明細書に記載するプロファイリング制御ブロックに対し、追加の機能または異なる機能を有する他のフィールドを含んでもよい点が留意される。] 図4
[0072] 図4に示す実施形態では、フラグフィールドは、ビット位置0〜3,31の5つのフラグを含む。フラグは、それぞれ、EN、IRE、BRE、DMEおよびINTである。ENフラグは、プロファイリングが有効に設定されているかどうかを示す。IREフラグは、命令のリタイアのイベントが有効に設定されているか示し、BREフラグは、分岐のリタイアのイベントが有効に設定されているか示し、DMEフラグは、DCacheミスイベントが有効に設定されているか示し、INTフラグは、しきい値割り込みが有効に設定されているか示す。別の実施形態は、追加のイベントをモニタしてもよく、追加のフラグビットを含んでもよい。] 図4
[0073] PCBのフィールド内の大部分は、プロファイリングセッションの間(プロファイリングメカニズム200を有効に設定してから無効にするまでの時間)、固定されうる。つまり、フィールドが、プロファイリングメカニズム200のハードウェアが有効にされたときにロードされ、必要に応じて同じ位置から定期的に再ロードされうる。定数のフィールドの内容はプロファイリングの実行中は変更を禁止されており、変更された場合には結果が予測不可能となる。また、PCBメモリを、リードオンリーに変更したりアンマップすると、モニタ論理18が次にPCBメモリへのアクセスを試みたときに、例外が発生することがある。]
[0074] フィールドのいくつかは、イベントレコードバッファを空にしているソフトウェアに進捗を通知するために、モニタ論理18によって変更されうる。プロファイリングメカニズム200が有効に設定されている間は、ソフトウェアは、このようなフィールドを読み出すことができるが、変更は禁止されている。他のフィールドを使用して、ソフトウェアがリングバッファを空にしたことを通知できるようにしてもよい。ソフトウェアがこのようなフィールドに書き込み、モニタ論理18が必要に応じてこのフィールドを読み出しうる。効率のために、上で述べたように、プロファイリングが有効な場合に、PCBのフィールドの一部が制御ブロックレジスタ218に複製されうる(shadowed)。モニタ論理18は、必要に応じて、下で更に詳しく説明するように、ソフトウェアが先に進めるように、これらのフィールドをメモリからリフレッシュ(またはメモリにフラッシュ)してもよい。]
[0075] 前述のように、PCBフィールドのいくつかは、モニタ論理18とユーザソフトウェアとによって非同期で書き込まれうる。関連するメモリトラフィックを低減させるために、いくつかの技術を使用することができる。例えば、モニタ論理18が、バッファのヘッドポインタとテイルポインタの内部コピーを保持してもよい。モニタ論理18は、イベントレコードを記憶するたびに、ヘッドポインタをPCBにフラッシュする必要はない。その代わりに、しきい値またはバッファフルのイベントが発生するまで、あるいはコンテキスト切替のためにコンテキストを保存する必要があるときまで、フラッシュが遅延されてもよい。したがって、リングバッファをポーリングしているプロセスまたはスレッドが先への進捗を参照できるように、バッファしきい値を超えたときに、ヘッドポインタをメモリに強制的に移動させる必要がある。]
[0076] モニタ論理18は、しきい値またはバッファフルの条件を検出しない限り、ソフトウェアに保持されているテイルポインタを読み出す必要はない。このような条件が発生した時点で、モニタ論理18は、テイルポインタを再び読み出して、ソフトウェアがバッファから一部のレコードを削除したかどうかを確認するように構成されうる。レコードが削除されている場合、モニタ論理18は、しきい値条件を再計算して、適宜処理する。このことは、バッファをポーリングするソフトウェアは、自身がしきい値イベントを検出した場合に、イベントレコードの処理を開始しなければならないことを暗に示している。ソフトウェアとの競合状態を回避するために、モニタ論理18は、しきい値条件が真であると思われる間は、イベントレコードを記憶するたびにテイルポインタを再読込する必要がある。別の実施形態として、モニタ論理18は、n回(nは小さな数)ごとにテイルポインタを再読込みしてもよい。]
[0077] 各種実施形態では、命令のリタイア時に複数のイベントが発生しうる。例えば、メモリのポインタを介した間接的な分岐は、命令のリタイア、分岐のリタイアおよびDCacheミスの各イベントを同時にトリガしうる。プロファイリングメカニズムは、命令に適用するすべてのイベントをカウントするが、1命令につき1つのイベントのみを報告するように構成されてもよい。他のイベントによって、イベントレコードが記憶されることはなくなる。どのイベントを報告するように選択するかは実装に依存し、同じプロセッサでも実行によって変わりうる。これにより、イベントのカウンタがいろいろなインターバルで切れるようになるため、定期的に複数のイベントを発生させる命令が、そのカテゴリのすべてにおいて報告されることが保証される。なお、別の実施形態では、複数のイベントが発生する場合、優先度方式を使用して、イベントの優先順位を決定してもよい。]
[0078] あるプロセスから別のプロセスに、あるいはカーネルからユーザプロセスに情報がリークされないことをOSは保証しなければならない点が留意される。このために、OSがプロファイリングメカニズム200をサポートしている場合、OSは、コンテキスト切替の発生時にモニタ論理18の状態が適切に設定されることを保証する必要があり、ハードウェアコンテキスト切替をサポートしているシステムでは、これが自動的に行われる必要がある。サポートしていない場合、各プロセスのPCBポインタを、プロセスコンテキストの一部として保存および復元する必要がある。]
[0079] プロファイリングメカニズム200の各種実装は、しきい値とオーバーフロー状態を迅速に検出するために、(サポートする最大同時発生イベント数まで)各種イベントのカウンタの現在の値を保持するための内部状態、イベントバッファへのポインタのコピー、およびテイルポインタのコピーを有する。一部の実施形態では、システムが揮発性のプロファイリング状態を維持する必要がある場合もある。OSが、あるユーザスレッドから別のユーザスレッドにコンテキスト切替を行ったときに、古いユーザ状態をそのスレッドのコンテキストによって保存し、新しい状態をロードする必要がある。ハイパーバイザが、あるゲストOSから別のゲストOSへの切替を決定した場合、これをゲストシステムの状態にも行う必要がある。最後に、SMMコードがコアへの給電を停止することを決定しうるため、システムがSMMに入るときとSMMから出るときに、状態を記憶する必要がある。保存すべき状態の量は非常に少ない。例示的な実施形態では、PCBアドレスは8バイト、BufferHeadOffset値は4バイト、26ビットカウンタ値はそれぞれ4バイトであり、MissedEventsカウンタをインクリメントすべきことを示すフラグ(1ビット)である。残りのプロファイリング状態はすべて、PCB自体から再構築することができる。]
[0080] SMM保存領域は、揮発性のプロファイリング状態を含んでもよい。必要な場合、SMMの出入時にプロファイリング状態を保存および復元してもよい。プロセッサが電力状態を変更しようとするときに、状態を保存する必要があるが、プロファイリングはCPL3のみで実行されるため、他の場合にその状態を保存および復元する必要はない。]
[0081] 前述のように、PCBは、メモリに常時存在していなくてもよい。このため、モニタ論理18は、OSカーネル/VMM/SMMにあるときは、PCBへのアクセスが失敗する可能性があるため、このようなアクセスを行ってはならない。プロファイリング状態の復元は、プロセッサがCPL3になってから行う必要があり、クラッシュせずにページフォルト例外を取得することができる。]
[0082] 1つのノードが複数のプロセッサコアを有する実施形態について上で説明したが、L3キャッシュサブシステム200,400に関連する機能が、シングルコアプロセッサを含むどのようなタイプのプロセッサで使用されてもよいことが考察される。このような実施形態では、モニタ論理18がそれぞれのコア内に存在してもよい。また、各種実施形態は、特定の実体をハードウェア実体またはソフトウェア実体として記述したが、上記の任意の実体が、必要に応じてハードウェア、ソフトウェアまたはその組み合わせで実装されてもよいことが考察される点も留意される。]
[0083] 上の実施形態についてかなり詳細に記載したが、上記の開示を完全に理解できれば、数多くの変形例および変更例が当業者にとって明らかであろう。下記の特許請求の範囲は、このような変形例および変更例を全て包含するものと解釈されることが意図される。]
[0084] 本発明は、一般にマイクロプロセッサに利用可能である。]
权利要求:

請求項1
1つ以上のプロセッサコア(15A,15B)を有するプロセッサ(12)であって、それぞれ1つ以上の実行スレッド(T1,T2,T3)を含む1つ以上のプロセス(P1,P2)を含む命令を実行するように構成された実行ロジックと、プロファイリングメカニズムとを備え、前記プロファイリングメカニズムは、前記1つ以上のプロセスをモニタし、モニタされている前記1つ以上のプロセスの制御のフローに割り込むことなく、前記1つ以上のプロセスに関連するパフォーマンスデータへのアクセスを提供するように構成されたモニタロジック(18A,18B)と、前記パフォーマンスデータを収集するように構成されたモニタプロセス(モニタコード)とを有する、プロセッサ。
請求項2
前記モニタプロセスは、ユーザモードで動作中に、前記1つ以上のプロセッサコアによって実行可能なプログラム命令を含む、請求項1に記載のプロセッサ。
請求項3
前記モニタロジックは、モニタされている前記1つ以上のプロセスのそれぞれの個々のアドレス空間内に記憶バッファ領域(231,232)を作成するように更に構成されている、請求項1に記載のプロセッサ。
請求項4
前記モニタ論理は所定のイベントの発生を記録し、対応するイベントレコード(305,310,320)を前記記憶バッファ領域に書き込むように更に構成されている、請求項3に記載のプロセッサ。
請求項5
前記モニタプロセスは、モニタされている前記1つ以上のプロセスのそれぞれの個々のアドレス空間の各記憶バッファ領域が所定のしきい値まで一杯になったかどうかを判定するために、ポーリング命令を実行するように構成されている、請求項4に記載のプロセッサ。
請求項6
前記モニタロジックは、所定の記憶バッファ領域が所定のしきい値まで一杯になったと判定されると、前記モニタプロセスに通知するように構成されている、請求項5に記載のプロセッサ。
請求項7
前記モニタロジックは前記プロセッサコアの1つで実行中のオペレーティングシステムに割り込みを発生させるように更に構成されており、前記オペレーティングシステムは前記割り込みに応答してユーザプロセスに通知するように構成されており、前記ユーザプロセスは前記イベントレコードを検査し、前記イベントレコードに対応する1つ以上の所定のアクションを実行するように構成されている、請求項6に記載のプロセッサ。
請求項8
前記モニタロジックは前記プロセッサコアの1つで実行中のオペレーティングシステムに割り込みを発生させるように更に構成されており、前記オペレーティングシステムは前記割り込みに応答してユーザプロセスに通知するように構成されており、前記ユーザプロセスは前記イベントレコードを検査し、所定の記憶バッファから不揮発性ストレージに前記イベントレコードを転送するように構成されている、請求項6に記載のプロセッサ。
請求項9
前記モニタロジックは所定の記憶バッファ領域が所定のしきい値まで一杯になったと判定されると、前記プロセッサコアの1つで実行中のオペレーティングシステムに割り込みを発生させるように構成されており、前記オペレーティングシステムは前記割り込みに応答してユーザプロセスに通知し、前記ユーザプロセスは前記イベントレコードを検査し、所定の記憶バッファから不揮発性ストレージに前記イベントレコードを転送するように構成されている、請求項5に記載のプロセッサ。
請求項10
前記モニタプロセスは他のスレッドをモニタするように構成された1つのモニタスレッド(ユーザモードモニタコード)を含み、前記1つのモニタスレッドは前記モニタされているスレッドのそれぞれのイベントレコードを維持する、請求項1に記載のプロセッサ。
类似技术:
公开号 | 公开日 | 专利标题
US20180060258A1|2018-03-01|Programmable event driven yield mechanism which may activate other threads
US9690581B2|2017-06-27|Computer processor with deferred operations
US9817644B2|2017-11-14|Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region
US9069605B2|2015-06-30|Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention
US10169268B2|2019-01-01|Providing state storage in a processor for system management mode
US8516196B2|2013-08-20|Resource sharing to reduce implementation costs in a multicore processor
Mutlu2007|Memory performance attacks: Denial of memory service in multi-core systems
AU2011305091B2|2014-09-25|Apparatus, method, and system for dynamically optimizing code utilizing adjustable transaction sizes based on hardware limitations
Browne et al.2000|A portable programming interface for performance evaluation on modern processors
US8769246B2|2014-07-01|Mechanism for selecting instructions for execution in a multithreaded processor
US6697935B1|2004-02-24|Method and apparatus for selecting thread switch events in a multithreaded processor
US5809450A|1998-09-15|Method for estimating statistics of properties of instructions processed by a processor pipeline
US6163840A|2000-12-19|Method and apparatus for sampling multiple potentially concurrent instructions in a processor pipeline
US7779238B2|2010-08-17|Method and apparatus for precisely identifying effective addresses associated with hardware events
US5537541A|1996-07-16|System independent interface for performance counters
US5923872A|1999-07-13|Apparatus for sampling instruction operand or result values in a processor pipeline
US7185234B1|2007-02-27|Trace control from hardware and software
KR100864747B1|2008-10-22|모니터-메모리 대기를 사용하여 큐잉된 로크들
US6092180A|2000-07-18|Method for measuring latencies by randomly selected sampling of the instructions while the instruction are executed
Martínez et al.2002|Cherry: Checkpointed early resource recycling in out-of-order microprocessors
US7412589B2|2008-08-12|Method to detect a stalled instruction stream and serialize micro-operation execution
CN101334721B|2013-06-19|线程活锁单元
US7020871B2|2006-03-28|Breakpoint method for parallel hardware threads in multithreaded processor
Tullsen et al.2001|Handling long-latency loads in a simultaneous multithreading processor
JP4371452B2|2009-11-25|コンピュータメモリシステムにおいて空間的及び時間的サンプリングを行う装置
同族专利:
公开号 | 公开日
DE112008003457T5|2010-10-14|
TW200941338A|2009-10-01|
CN101952806A|2011-01-19|
WO2009085088A1|2009-07-09|
GB201011296D0|2010-08-18|
US7962314B2|2011-06-14|
US20090157359A1|2009-06-18|
GB2467891A|2010-08-18|
KR20100112137A|2010-10-18|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
法律状态:
优先权:
申请号 | 申请日 | 专利标题
[返回顶部]